home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 44 / Amiga Format CD44 (1999-08-26)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-10].iso / -serious- / misc / cmq060 / source / cmq060move16.include.s < prev    next >
Text File  |  1999-07-26  |  5KB  |  187 lines

  1. *************************************
  2. *   CopyMemQuicker060 with Move16   *
  3. *         Include File V1.4         *
  4. *       written by Dirk Busse       *
  5. *            3. Apr. 1999           *
  6. *************************************
  7.  
  8. PatchStart
  9.  
  10.         tst.l   d0
  11.         beq.b   squit
  12.         move.w  a1,d1   ;Zieladresse nach d1 (nur die ersten zwei Bits werden benötigt)
  13.         btst    #0,d1
  14.         beq.b   .skip1
  15.         move.b  (a0)+,(a1)+    ;Zieladresse auf EVEN setzen
  16.         subq.l  #1,d0
  17.         beq.b   squit
  18.         move.w  a1,d1
  19. .skip1  btst    #1,d1
  20.         beq.b   .skip2
  21.         cmpi.l  #1,d0
  22.         bne.b   .two
  23.         move.b  (a0)+,(a1)+
  24.         rts
  25.  
  26. ;  cnop 0,4
  27.  
  28. .two    move.w  (a0)+,(a1)+    ;Zieladresse auf LONG setzen
  29.         subq.l  #2,d0
  30.         beq.b   squit
  31. .skip2
  32.         cmpi.l  #%0000100000010000,d0 ;prüfen, ob d0 >=2064
  33.         bcc.b   bigmove
  34.  
  35. smlmove move.l  d0,d1
  36.         lsr.w   #2,d1          ;d0 ist hier nur noch maximal 12Bit lang
  37.         beq.b   .nolong
  38. .loop   move.l  (a0)+,(a1)+
  39.         subq.w  #1,d1
  40.         bne.b   .loop
  41.  
  42. .nolong btst    #1,d0
  43.         beq.b   .skip
  44.         move.w  (a0)+,(a1)+    ;letztes Word uebertragen
  45. .skip   btst    #0,d0
  46.         beq.b   squit
  47.         move.b  (a0)+,(a1)+    ;letztes Byte uebertragen
  48. squit   rts
  49.  
  50. ;  cnop 0,4
  51.  
  52. bigmove move.w  a1,d1
  53.         btst    #2,d1
  54.         beq.b   .skip1
  55.         subq.l  #%100,d0       ;Zieladresse auf 8-Byte-Block legen
  56.         move.l  (a0)+,(a1)+
  57.         move.w  a1,d1
  58. .skip1  btst    #3,d1
  59.         beq.b   .dest16
  60.         subq.l  #%1000,d0       ;Zieladresse auf 16-Byte-Block legen
  61.         move.l  (a0)+,(a1)+
  62.         move.l  (a0)+,(a1)+
  63. .dest16 move.w  a0,d1
  64.         andi.b  #15,d1
  65.         bne.b   bigmov     ;wenn Quelladresse nicht im 16-Byte-Block liegt
  66.  
  67.         move.l  d0,d1
  68.         lsr.l   #7,d1
  69. .loop   move16  (a0)+,(a1)+
  70.         move16  (a0)+,(a1)+
  71.         move16  (a0)+,(a1)+
  72.         move16  (a0)+,(a1)+
  73.         move16  (a0)+,(a1)+
  74.         move16  (a0)+,(a1)+
  75.         move16  (a0)+,(a1)+
  76.         move16  (a0)+,(a1)+
  77.         subq.l  #1,d1
  78.         bne.b   .loop
  79.         and.w   #%0000000001111111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
  80.         bne.b   smlmove
  81.         rts
  82.  
  83. ;  cnop 0,4
  84.  
  85. bigmov  move.l  d0,d1
  86.         lsr.l   #6,d1
  87. .loop   move.l  (a0)+,(a1)+
  88.         move.l  (a0)+,(a1)+
  89.         move.l  (a0)+,(a1)+
  90.         move.l  (a0)+,(a1)+
  91.         move.l  (a0)+,(a1)+
  92.         move.l  (a0)+,(a1)+
  93.         move.l  (a0)+,(a1)+
  94.         move.l  (a0)+,(a1)+
  95.         move.l  (a0)+,(a1)+
  96.         move.l  (a0)+,(a1)+
  97.         move.l  (a0)+,(a1)+
  98.         move.l  (a0)+,(a1)+
  99.         move.l  (a0)+,(a1)+
  100.         move.l  (a0)+,(a1)+
  101.         move.l  (a0)+,(a1)+
  102.         move.l  (a0)+,(a1)+
  103.         subq.l  #1,d1
  104.         bne.b   .loop
  105.         and.w   #%0000000000111111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
  106.         bne.b   smlmove
  107.         rts
  108.  
  109.   cnop 0,4
  110. **************************************************************************
  111.  
  112. Quickest
  113.         lsr.l   #2,d0
  114.         cmpi.l  #%0000001000000100,d0 ;prüfen, ob d0 >=2064/4
  115.         bcc.b   bigmo16
  116.  
  117. smlmovQ tst.w   d0          ;d0 ist hier nur noch maximal 10 Bit lang
  118.         beq.b   squitQ
  119. sloopQ  move.l  (a0)+,(a1)+
  120.         subq.w  #1,d0
  121.         bne.b   sloopQ
  122. squitQ  rts
  123.  
  124. ;  cnop 0,4
  125.  
  126. bigmo16 move.w  a1,d1
  127.         btst    #2,d1
  128.         beq.b   .skip1
  129.         subq.l  #1,d0       ;Zieladresse auf 8-Byte-Block legen
  130.         move.l  (a0)+,(a1)+
  131.         move.w  a1,d1
  132. .skip1  btst    #3,d1
  133.         beq.b   .dest16
  134.         subq.l  #2,d0       ;Zieladresse auf 16-Byte-Block legen
  135.         move.l  (a0)+,(a1)+
  136.         move.l  (a0)+,(a1)+
  137. .dest16 move.w  a0,d1
  138.         andi.b  #15,d1
  139.         bne.b   bigmovQ     ;wenn Quelladresse nicht im 16-Byte-Block liegt
  140.  
  141.         move.l  d0,d1
  142.         lsr.l   #5,d1
  143. .loop   move16  (a0)+,(a1)+
  144.         move16  (a0)+,(a1)+
  145.         move16  (a0)+,(a1)+
  146.         move16  (a0)+,(a1)+
  147.         move16  (a0)+,(a1)+
  148.         move16  (a0)+,(a1)+
  149.         move16  (a0)+,(a1)+
  150.         move16  (a0)+,(a1)+
  151.         subq.l  #1,d1
  152.         bne.b   .loop
  153.         and.w   #%0000000000011111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
  154.         bne.b   sloopQ
  155.         rts
  156.  
  157. ;  cnop 0,4
  158.  
  159. bigmovQ move.l  d0,d1
  160.         lsr.l   #4,d1
  161. .loop   move.l  (a0)+,(a1)+
  162.         move.l  (a0)+,(a1)+
  163.         move.l  (a0)+,(a1)+
  164.         move.l  (a0)+,(a1)+
  165.         move.l  (a0)+,(a1)+
  166.         move.l  (a0)+,(a1)+
  167.         move.l  (a0)+,(a1)+
  168.         move.l  (a0)+,(a1)+
  169.         move.l  (a0)+,(a1)+
  170.         move.l  (a0)+,(a1)+
  171.         move.l  (a0)+,(a1)+
  172.         move.l  (a0)+,(a1)+
  173.         move.l  (a0)+,(a1)+
  174.         move.l  (a0)+,(a1)+
  175.         move.l  (a0)+,(a1)+
  176.         move.l  (a0)+,(a1)+
  177.         subq.l  #1,d1
  178.         bne.b   .loop
  179.         and.w   #%0000000000001111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
  180.         bne.b   sloopQ
  181.         rts
  182.  
  183.   cnop 0,4
  184.  
  185. PatchEnd
  186.  
  187.